iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
生成式 AI

三十天解鎖上下文超能力:MCP 實戰系列 第 8

Day 8 - 使用 n8n 打造一個天氣查詢 MCP Server

  • 分享至 

  • xImage
  •  

大家好!鐵人賽邁入第八天。

在昨天,我們用一個簡易的計算機 server,成功地展示了 AI Agent 呼叫 MCP Server 的基本流程。今天,我們要將難度與實用性大幅提升,打造一個能串接外部真實 API 的「天氣查詢工具」

這個專案將會比計算機複雜,因為我們需要處理:

  1. 非同步的網路請求
  2. 複雜的 API 回應資料
  3. 將原始資料整理成人類易讀的格式

最終,我們將會建立一個能透過聊天視窗查詢台灣各縣市天氣的 AI 應用!

一、專案架構:職責分離的三個工作流

為了讓我們的專案結構清晰、易於維護,我們將建立三個各自獨立又互相協作的工作流:

  1. Weather (天氣邏輯核心): 這個工作流是我們的「工具」。它的職責很單純:接收一個城市名稱,去中央氣象署抓取資料,然後將複雜的資料整理成一段簡潔的摘要。
  2. MCPClient (MCP 伺服器): 這個工作流是我們的「專案經理」。它負責對外溝通,將「天氣邏輯核心」包裝成一個符合 MCP 規範的工具,供 AI Agent 發現和呼叫。
  3. MCP Demo (AI Agent 主流程): 這是我們的「HOST」。使用者在這裡下達指令,AI Agent 會在這裡進行思考和決策。

這種「職責分離」的架構,是軟體工程中的一個非常好的實踐!

image

二、步驟一:建立「天氣邏輯核心」工作流

我們從最內層的工人——Weather 工作流開始。

  1. 新建工作流,並將其命名為 Weather
  2. 觸發器: 使用 When Executed by Another Workflow 節點。這表示它只能被其他 n8n 工作流觸發。
  3. Code 節點: 接收傳入的城市名稱(例如 {"city": "臺中市"}),並使用我們之前學到的 Python 程式碼,組裝出中央氣象署 OpenData 的 API URL。
import urllib.parse

# 這個腳本會處理所有傳入的項目
# 並假設每個項目中都有一個名為 'city' 的欄位
for item in _input.all():
    
    # 1. 從傳入的 JSON 中獲取城市名稱
    # 使用 .get() 是更安全的方式,如果找不到 'city',就使用預設值 '台北市'
    city_name = item.json.get('city', '臺北市')
    
    # 2. 定義 API 的固定部分
    base_url = "https://opendata.cwa.gov.tw/api/v1/rest/datastore/F-C0032-001"
    auth_token = "CWA-A4AA97C5-E3C1-4BEB-B730-688876F81863"
    
    # 3. 對中文城市名稱進行 URL 編碼
    # 這一步會將 "台中市" 轉換成 "%E8%87%BA%E4%B8%AD%E5%B8%82"
    encoded_location_name = urllib.parse.quote(city_name)
    
    # 4. 使用 f-string 組裝出完整的 API 網址
    full_api_url = f"{base_url}?Authorization={auth_token}&locationName={encoded_location_name}"
    
    # 5. 將產生好的網址,新增到 JSON 的一個新欄位 'apiUrl' 中
    item.json['apiUrl'] = full_api_url

# 將所有被修改過的項目回傳給下一個節點
return _input.all()
  1. HTTP Request 節點: 使用 GET 方法,呼叫 Code 節點產生的 URL,獲取天氣預報的原始 JSON 資料。設定如片如下
    截圖 2025-09-02 下午4.39.15

  2. Edit Fields (或 Set) 節點: 氣象署回傳的資料非常龐大。使用這個節點來提取我們真正需要的欄位,例如未來幾個時段的「最高溫度」、「最低溫度」、「降雨機率」和「天氣狀況」。
    截圖 2025-09-02 下午4.40.10

  3. Basic LLM Chain 節點: 這是畫龍點睛的一步!我們不直接回傳枯燥的數據,而是將提取出來的關鍵數據,交給另一個 LLM (例如 Gemini),並下 prompt。
    截圖 2025-09-02 下午4.41.34

你是一位智慧天氣助理,請根據以下輸入的臺中市逐時氣溫與每三小時降雨機率資料,整理出未來三天的天氣預報摘要,請優先使用資料內最早的日期優先當作第一天,請用繁體中文說明,並依照以下格式輸出:

以下是氣象資料:

每小時氣溫:包含 DataTime 與 ElementValue(溫度值): {{ $json.MinT }}{{ $json.MaxT }}

每三小時降雨機率:包含 StartTime、EndTime 與 ProbabilityOfPrecipitation : {{ $json.Rain }}

體感舒適度:{{ $json.Comfortindex }}

綜合天氣評論:{{ $json.Description }}
---

日期:年-月-日  
天氣狀況:(可根據溫度與降雨機率簡要判斷,如「晴朗」、「局部短暫雨」、「午後雷陣雨」等)  
最高溫度:°C  
最低溫度:°C  
降雨機率:%(取當天所有降雨機率中的最高值)
舒適程度:

請連續列出兩天資料,其餘皆不要輸出。並且使用繁體中文。

  1. 儲存並啟用 (Active) 工作流。

您的 Weather 工作流,完美地展示了從接收參數到最終用 LLM 美化輸出的完整過程。

三、步驟二:建立「MCP 伺服器」工作流

接下來,我們建立「專案經理」——MCPClient 工作流,將剛剛的 Weather 工作流包裝成一個標準的 MCP 工具。

  1. 新建工作流,並命名為 MCPClient

  2. 觸發器: 這次我們使用 MCP Server Trigger 節點。這個節點會生成一個專屬的 URL,讓外部的 MCP Host (如 Claude Desktop 或我們的 AI Agent) 可以連接。

  3. 新增工具 (Call n8n Workflow Tool):

    • MCP Server Trigger 下方,點擊 + 號,選擇 Add Tool,然後選擇 Call n8n Workflow Tool
    • Tool Description: Call this tool to get weather data (好的描述能幫助 AI Agent 更好地理解工具用途)
    • Properties (輸入參數): 新增一個名為 city 的參數。
    • Workflow to Call: 在下拉選單中,選擇我們剛剛建立的 Weather 工作流。
      截圖 2025-09-02 下午4.42.26
  4. 儲存並啟用 (Active) 工作流。

您的 MCPClient 工作流,清晰地展示了如何將一個內部工作流 (Call n8n Workflow Tool) 透過 MCP Server Trigger 暴露成一個外部可用的工具。

四、步驟三:在主流程中呼叫天氣工具

萬事俱備,只欠東風!現在回到我們的「HOST」——MCP Demo 工作流。

  1. 打開您在 Day 7 建立的 MCP Demo 工作流。
  2. 點擊 AI Agent 節點。
  3. Tools 欄位,除了原有的計算機工具外,點擊 Add Tool,你會看到一個新的選項,來自我們的 MCP Server Trigger,選擇它,並將 get_weather_forecast_for_taiwan_city 工具掛載上去。
  4. 儲存工作流。

五、終極測試

打開 MCP Demo 工作流的聊天視窗,輸入你的指令:

給我臺中市天氣

你會看到 AI Agent 接收到指令後,經過短暫的思考,成功地呼叫了我們的天氣工具,並回傳了由 LLM 整理過的、非常人性化的天氣預報!

從日誌中可以看到,AI Agent (第一個 LLM) 決定使用工具,MCP Client 成功執行並回傳結果,最終由第二個 LLM 整合輸出。

截圖 2025-09-02 下午4.47.07
截圖 2025-09-02 下午4.47.31


六、今日總結

恭喜你!今天我們完成了一個非常貼近真實應用場景的專案。我們學會了:

  1. 多工作流協作的開發模式,將邏輯與服務分離。
  2. 如何將一個複雜的內部邏輯,包裝成一個標準的 MCP 工具對外提供服務。
  3. 如何利用 LLM 來美化和總結工具的輸出,提供更好的使用者體驗。

我們的 AI Agent 不再只是一個玩具,它已經具備了連接真實世界、獲取即時資訊的強大能力。明天,我們將繼續挑戰,打造下一個更酷的工具!


上一篇
Day 7 - 使用 n8n 建構 MCP
下一篇
Day 9 - 使用 n8n 打造新聞GNews查詢 mcp server
系列文
三十天解鎖上下文超能力:MCP 實戰9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言